// int* arry[10] = {int1*, int2*, int3*, ......}

// for(int i = 0; i < 10; i++)
//     free(array[i]);

// free(array);

// [[], [], [], ......]

// // 两个特例：
// sizeof(array)    // sizeof(array[0]);
// &array

// free         delete
// free free ..    delete[]

// int* array[];
// delete[] array;

// class date{

// };
// data* array[10];
// for(int i = 0; i : 10; i++)
//     array[i] = new data();
// delete[]

// shared_ptr  weak_ptr
// unique_ptr

#include <iostream>

using namespace std;

void my_sort(int array[], int l, int r)
{
    if (l >= r)
        return;

    // 用注释的方式的话，下面的也是用注释的方式的哦
    // int target = array[(l + r) / 2], left = l - 1, right = r + 1;
    int target = array[(l + r) / 2], left = l, right = r;
    while (left < right)
    {
        // do
        // {
        //     left++;
        // } while (array[left] < target);
        // do
        // {
        //     right--;
        // } while (array[right] > target);

        while (array[left] < target)
            left++;
        while (array[right] > target)
            right--;

        if (left < right)
        {
            int temp = array[left];
            array[left] = array[right];
            array[right] = temp;
        }
    }
    my_sort(array, l, right);
    my_sort(array, right + 1, r);
}

int main(void)
{
    int array[] = {10, 9, 8, 3, 2, 1, 4, 5, 6, 7, 0};
    int len = sizeof(array) / sizeof(array[0]);
    my_sort(array, 0, len - 1);
    for (int i = 0; i < len; i++)
        printf("%d ", array[i]);
    printf("\n");

    return 0;
}
